;(function () {
  class A {
    name: string
    constructor(name: string) {
      this.name = name
    }
  }

  // class B{
  //   a: any
  //   constructor() {
  //     this.a = new A().name
  //   }
  // }

  // class C {
  //   a: any
  //   constructor() {
  //     this.a = new A().name
  //   }
  // }
  /* 这种方式属于强耦合 A动了  BC类斗得跟着改 */

  class C {
    name: string
    constructor(name: string) {
      this.name = name
    }
  }

  //创建一个容器用于收集依赖
  class Container {
    mo: any
    constructor() {
      this.mo = {}
    }
    provide(key: string, mo: any) {
      this.mo[key] = mo
    }

    get(key: string) {
      return this.mo[key]
    }
  }

  const mo = new Container()
  mo.provide('a', new A('猪八戒'))
  mo.provide('c', new A('孙悟空'))

  class B {
    a: any
    c: any
    constructor(mo: Container) {
      this.a = mo.get('a')
      this.c = mo.get('c')
    }
  }

  console.log(B)
})()
